part of '../type.dart';

/// 某种类型的参数，比如文件、字符串比如apiKey等需要配置的内容
/// 参数的特性是能且必须要设置一次，因此预先写一些逻辑来避免重复代码
/// 建议命名示范：_argSecret
/// 所有的参数建议都设置为隐藏，因为通常它是整个库的一部分，通常仅供内部使用，防止保留
/// 应该暴露一个函数用于接收初始化输入
class Argument<T> {
  T? _value;

  set value(T input) {
    if (_value != null) throw BugDev("参数只能初始化一次");
    _value = input;
  }

  T get value {
    if (_value == null) throw BugDev("参数尚未初始化");
    return _value!;
  }
}
